package org.example.lys.list;

import com.alibaba.fastjson.JSON;

import java.util.*;

/**
 * @author liyishan
 * @date 2025/1/8
 * @description
 */

public class TestArrayList {

    public static void main(String[] args) {
        //默认长度是10 ，10 以内不需要扩容
        List<String> list1= new ArrayList<>();
        list1.add("1");
        //超过10 需要扩容1.5倍 即 15
        // 后续只有 this.size(数组内实际个数等于之前扩容后的长度时才会继续扩容)
        list1.add("11");
        //如果只有一个元素了   删除后   将最后一个或者唯一个元素置为null
        //如果不只一个元素     删除后   System.arraycopy(es, i + 1, es, i, newSize - i);  然后将最后一个元素置为 null
        list1.remove("11");
        //引用赋值
        List<String> list111 = list1;
        //如果两个list长度加一块超过list1的长度则 扩容
        //赋值  size = 两个数组长度之和
        list1.addAll(list111);
        System.out.println("原始数据:"+ JSON.toJSON(list1));

        //非引用赋值
        List<String> list1Copy = new ArrayList<>(list1);
        list1.add("4");
        System.out.println("原始数据:"+ JSON.toJSON(list1));
        System.out.println("引用数据:"+ JSON.toJSON(list111));
        System.out.println("非引用数据:"+ JSON.toJSON(list1Copy));

        //writeObject  和  readObject  自定义序列化和饭序列化策略  出于效率的考虑，数组可能长度100 但实际用了50  剩下50其实不用序列化

        //subList方法返回的列表是原列表的视图，对返回列表的任何结构修改（add/remove等）都会直接反映到原列表上。如果你只需要读取元素而不打算修改它们，这个方法很合适。
        list1Copy.subList(0, 2);

        list1Copy.forEach(System.out::println);

        //遍历把每个元素置为null
        list1.clear();




        // 1. 使用 Collections.emptyList() 创建一个空的不可变 List
        List<String> list = Collections.emptyList();
        // 以下代码会抛出 UnsupportedOperationException，因为 list 是不可变的
        // list.add("item");



    }
}
